HIDL 代碼樣式類似於 Android 框架中的 C++ 代碼,
縮進 4 個空格,並且採用混用大小寫的文件名。
package 宣告、import 和文檔字符串與 Java 中的類似,只有些微差別。
下面針對 IFoo.hal
和 types.hal
的示例展示了 HIDL 代碼樣式,
並提供了指向每種樣式詳細信息的快速鏈接。
hardware/interfaces/foo/1.0/IFoo.hal
/*
* (License Notice)
*/
package android.hardware.foo@1.0;
import android.hardware.bar@1.0::IBar;
import IBaz;
import IFooClientCallback;
/**
* IFoo is an interface that…
*/
interface IFoo {
/**
* This is a multiline docstring.
*
* @return result 0 if successful, nonzero otherwise.
*/
foo() generates (FooStatus result);
/**
* Restart controller by power cycle.
*
* @param bar callback interface that…
* @return result 0 if successful, nonzero otherwise.
*/
powerCycle(IBar bar) generates (FooStatus result);
/** Single line docstring. */
baz();
/**
* The bar function.
*
* @param clientCallback callback after function is called
* @param baz related baz object
* @param data input data blob
*/
bar(IFooClientCallback clientCallback,
IBaz baz,
FooData data);
};
hardware/interfaces/foo/1.0/types.hal
/*
* (License Notice)
*/
package android.hardware.foo@1.0;
/** Replied status. */
enum Status : int32_t {
OK,
/* invalid arguments */
ERR_ARG,
/* note, no transport related errors */
ERR_UNKNOWN = -1,
};
struct ArgData {
int32_t[20] someArray;
vec<uint8_t> data;
};
函數名稱、變量名稱和文件名應該是描述性名稱;避免過度縮寫。
將首字母縮略詞視為字詞(例如,請使用 INfc,而非 INFC)。
目錄結構應如下所示:
其中:
ROOT-DIRECTORY
為
hardware/interfaces
(如果是核心HIDL 軟件包)。vendor/VENDOR/interfaces
(如果是供應商軟件包),MODULE
應該是一個描述子系統的小寫字詞(例如 nfc)。如果需要多個字詞,請使用嵌套式SUBMODULE
。可以嵌套多層。VERSION
應該與版本中所述的版本完全相同(major.minor)。IINTERFACE_X
應該是含有 UpperCamelCase/ PascalCase 的接口名稱(例如 INfc),例如:
其實底下還有一堆用法詳細說明,
但全部都列出來也太浪費時間看了,
通常都是有需要用到的時候在看就好。
所以下面有連結的部份,
有需要可以全部看完,大致上有個印象就好。
至於後面文章會以實際例子來說明,
讓我們看下去!
Code Style Guide | Android Open Source Project